package main

import (
	"fmt"
	"sort"
)

/*
	一个整数可以由连续的自然数之和来表示。
	给定一个整数，计算该整数有几种连续自然数之和的表达式，且打印出每种表达式
*/

func main() {
	println(getResult3(12))
}
func getResult3(target int) int {
	arr := make([]int, target)
	ans := make([][]int, 0)
	for i := 0; i < target; i++ {
		arr[i] = i + 1
	}
	left, right := 0, 1
	sum := arr[left]
	for {
		if left > right {
			break
		}
		if sum == target {
			ans = append(ans, arr[left:right])
			sum -= arr[left]
			left++
			if right >= target {
				break
			}
			sum += arr[right]
			right++
		} else if sum < target {
			sum += arr[right]
			right++
		} else if sum > target {
			sum -= arr[left]
			left++
		}
	}
	sort.Slice(ans, func(i, j int) bool {
		return len(ans[i]) < len(ans[j])
	})
	fmt.Println(ans)
	// for _, an := range ans {
	// 	sj := ""
	// 	for _, num := range an {
	//
	// 	}
	// }
	return len(ans)
}
